package com.xyd.common.result;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.Value;

import java.util.List;

@Schema(description = "统一返回值")
@Data
@NoArgsConstructor
public class GlobalResultClass<T> {
    @Schema(description = "状态码")
    private Integer code;
    @Schema(description = "提示信息")
    private String message;
    @Schema(description = "返回数据")
    private T data;
    public static <T> GlobalResultClass<T> build(Integer code,ResultStatusEnum resultStatusEnum) {
        GlobalResultClass<T> tGlobalResultClass = new GlobalResultClass<>();
        tGlobalResultClass.setCode(resultStatusEnum.getStatus());
        tGlobalResultClass.setMessage(resultStatusEnum.getMessage());
        return tGlobalResultClass;
    }

    public static<T> GlobalResultClass<T> build(Integer code, String message, T data){
        GlobalResultClass<T> tGlobalResultClass = new GlobalResultClass<>();
        if(data != null){
            tGlobalResultClass.setData(data);
        }
        tGlobalResultClass.setCode(code);
        tGlobalResultClass.setMessage(message);
        return tGlobalResultClass;
    }
    /**
     * 操作成功，无需返回data数据
     */
    public static <T> GlobalResultClass<T> ok(){
        return ok(null);
    }
    /**
     * 操作成功，需要返回data数据
     */
    public static <T> GlobalResultClass<T> ok(T data){
        return build(20000,"成功",data);
    }

    public static <T> GlobalResultClass<T> fail(){
        return fail(null);
    }
    /**
     * 操作失败，需要返回data数据
     * @param data
     * @return
     * @param <T>
     */
    public static <T> GlobalResultClass<T> fail(T data){
        return build(4001,"失败",data);
    }
    // 封装返回响应信息的方法
    public  GlobalResultClass<T> message(String message){
        this.setMessage(message);
        return this;
    }
    //封装返回状态码的方法
    public  GlobalResultClass<T> code(Integer code){
        this.setCode(code);
        return this;
    }



}
